Fonctions G-Code spécifiques à l'utilisateur
Le CNC11_CustomFunctions.project
un exemple de projet se trouve dans le répertoire d'installation de CODESYS sous ..\CODESYS SoftMotion\Examples
.
Cet exemple montre comment créer vos propres fonctions à utiliser dans des expressions en G-code.
Pour plus d'informations sur les expressions et les fonctions du code G, consultez : Expressions. Vous y trouverez une liste de tous les opérateurs et fonctions pris en charge par défaut.
L'exemple définit SEL opérateur de la norme IEC 61131-3 afin qu'il puisse également être utilisé en code G.
Structure de la demande
Comme d'habitude pour les applications CNC, l'application consiste en un traitement de trajectoire (CNC_PreparePath
programme) et interpolation (CNC
programme). Comme l'interpolation ne diffère pas des autres exemples, le sujet ne sera pas abordé plus
Le traitement des chemins est appelé cycliquement toutes les 20 ms en basse priorité PathTask
. L'interpolation est appelée cycliquement toutes les 4 ms MotionTask
. La tâche d'arrière-plan VISU_TASK
est défini pour la visualisation.
Dans la visualisation, vous pouvez commencer à traiter le code G et définir la valeur de la variable $LONGLINE$
. Le code G et le mouvement de la machine (portique 3D) sont affichés sur le côté droit de la visualisation
Le code G
CNC
LET #WIDTH : LREAL N10 G36 O#WIDTH D SEL($LONGLINE$, 40, 110) N20 F50 E100 E-100 N30 G01 X#WIDTH Y#WIDTH Z#WIDTH/2 N40 Y-#WIDTH N50 X-#WIDTH Z-#WIDTH/2 N60 Y#WIDTH N70 X0 Y0 Z0
Ligne 1 : Déclaration de la variable locale #WIDTH
de type LREAL
.
Ligne 2, bloc N10 : Affectation de la valeur de SEL($LONGLINE$, 40, 110)
à la variable #WIDTH
. Si la valeur de la variable PLC $LONGLINE$
est TRUE
, alors la valeur de l'expression est 110 ; sinon elle est 40.
Dans les lignes suivantes, un rectangle avec un mouvement supplémentaire dans la direction Z est parcouru ; la longueur d'un côté du rectangle est 2*#WIDTH
.
Mise en œuvre de la SEL
fonction

Pour créer une fonction définie par l'utilisateur, vous devez écrire un bloc de fonction qui implémente le SMC_NC_IFunction
interface.
Pour plus d'informations, voir : Fonction SMC_NC_I.
GetSignature
. Le type de retour, le nombre et les types d'arguments de la fonction sont renvoyés ici. Dans cet exemple,SEL
la fonction renvoie une valeur de typeT_OTHER
et possède 3 arguments de typeT_BOOL
,T_OTHER
, etT_OTHER
.T_OTHER
représente n'importe quel type (soitT_BOOL
,T_LREAL
, ouT_STRING
]. Les 3 occurrences deT_OTHER
doit être du même type.METHOD GetSignature VAR_OUTPUT resultType : SMC_GVar_Type; nNumArguments : UDINT; pType : POINTER TO SMC_GVar_Type; END_VAR VAR argTypes : ARRAY[0..2] OF SMC_GVar_Type := [SMC_GVar_Type.T_BOOL, SMC_GVar_Type.T_OTHER, SMC_GVar_Type.T_OTHER]; END_VAR resultType := SMC_GVAR_Type.T_OTHER; nNumArguments := 3; pType := ADR(argTypes);
Call
: Cette méthode est appelée lorsque le code G est en cours de traitement. Les arguments sont transmis viapa
entrée. L'expressionpa[0].argValue.bValue
est utilisé pour accéder à la valeur booléenne du premier argument. En fonction du type du deuxième argumentpa[1].argType
, le résultat est la valeur de retourresult.argType
et le branchement vers une instruction CASE.METHOD Call VAR_IN_OUT result : SMC_NC_GArgument; END_VAR VAR_INPUT pa : POINTER TO SMC_NC_GArgument; END_VA RVAR_OUTPUT eError : SMC_ERROR; END_VAR VAR g : BOOL; END_VAR g := pa[0].argValue.bValue; result.argType := pa[1].argType; CASE result.argType OF SMC_GVAR_Type.T_BOOL: result.argValue.bValue := SEL(g, pa[1].argValue.bValue, pa[2].argValue.bValue); SMC_GVAR_Type.T_STRING: result.argValue.sValue := SEL(g, pa[1].argValue.sValue, pa[2].argValue.sValue); SMC_GVAR_Type.T_LREAL: result.argValue.fValue := SEL(g, pa[1].argValue.fValue, pa[2].argValue.fValue); ELSE eError := SMC_INVALID_PARAMETER; END_CASE
Configuration de SMC_ReadNCFile2
Une instance de CNC_Sel
le bloc de fonction est créé dans le GVL_CNCFunctions
liste globale de variables.
Un tableau aCNCFunctions
de longueur 1 est initialisée avec le nom et l'instance du bloc fonctionnel. Ce tableau est ensuite lié dans le tableau funTable
de type SMC_NC_GFunctionTable
.
aCNCFunctions : ARRAY[0..0] OF SMC_NC_GFunction := [(stName:= 'SEL', iFunc:= GVL_CNCFunctions.g_Sel)]; funTable : SMC_NC_GFunctionTable := (numFunctions:= 1, pFunction:= ADR(aCNCFunctions)) ;
Enfin, ce tableau est transmis au SMC_ReadNCFile2
bloc fonctionnel :
rncf2 : SMC_ReadNCFile2 := (bParenthesesAsComments:= FALSE); [...] rncf2( bExecute:= TRUE, sFileName:= sFileName, pCustomFunTable:= ADR(funTable), pvl:= ADR(varList));
Mise en service
Créez l'application et téléchargez-la sur une manette.
Démarrez l'application, passez à la visualisation et appuyez sur
Start
. Vous pouvez utiliserLongline
bouton radio pour définir la valeur de la variable$LONGLINE$
dans le code G pourTRUE
ouFALSE
.